
import numpy as np
import pandas as pd
import os
from datetime import datetime  # 导入 datetime 模块

from common.handleExcel import save_to_excel, move_column, save_to_newexcel_bytime, read_excel_to_dataframe, \
    format_data2str
from common.part21GetList import get_part21_list, part21_get_list_bycolumn, get_part21_list, get_part21_epc2county2city, \
    get_part21_list_by_epc2county2city, part21_handle_result0spot1_table, part21_handle_result1_table
from common.part21StatisticsUtil import \
    part21_handle_beginyear_estimate_withyear_idlelandlist, \
    part21_cal_idleland_by_baselist_sub_handledlist, part21_cal_withyear_new_increase_idleland, \
    part21_cal_beginyear_estimate_withyear_idlelandlist, part21_handle_beginyear_estimate_withyear_idlelandlist
from ui import SelectExcelFileSheet


#if __name__ == '__main__':
def part21_process_data(selectExcelFileSheet: SelectExcelFileSheet):

    # 获取----1.闲置周报表格逻辑关系--实际管理区匹配设区市 ---Excel文件path和SheetName
    # 实际管理区	设区市
    # 鹰潭市本级	鹰潭市
    url4Conty2City, sheetName4Conty2City = selectExcelFileSheet.showWindow('1.闲置周报表格逻辑关系--实际管理区匹配设区市')
    if url4Conty2City is None or sheetName4Conty2City is None:
        return
    # 读取---1.闲置周报表格逻辑关系--实际管理区匹配设区市 ---Excel文件path和SheetName
    # 实际管理区	设区市
    # 鹰潭市本级	鹰潭市
    df4Conty2City = read_excel_to_dataframe(url4Conty2City, sheetName4Conty2City)



    # 获取----地方反馈年内新增归属---Excel文件path和SheetName
    #电子监管号	实际管理区
    #3606812022B00447	贵溪市
    url4Epc2Conty4Local, sheetName4Epc2Conty4Local = selectExcelFileSheet.showWindow('地方反馈年内新增归属')
    if url4Epc2Conty4Local is None or sheetName4Epc2Conty4Local is None:
        return
    #地方反馈年内新增归属  和 1.闲置周报表格逻辑关系--实际管理区匹配设区市 进行匹配
    #电子监管号 实际管理区  和  实际管理区	设区市
    #电子监管号 实际管理区  设区市
    #3606812022B00447	贵溪市  鹰潭市
    epc2county2cityTable4Local = get_part21_epc2county2city(url4Epc2Conty4Local, sheetName4Epc2Conty4Local,
                               url4Conty2City, sheetName4Conty2City)

    #读取---1.闲置周报表格逻辑关系--行政区划代码对应---Excel文件path和SheetName
    #行政区代码前六位	实际管理区	设区市
    url4CountyCode2CountyName2City, sheetName4CountyCode2CountyName2City \
        = selectExcelFileSheet.showWindow('1.闲置周报表格逻辑关系--行政区划代码对应')
    if url4CountyCode2CountyName2City is None or sheetName4CountyCode2CountyName2City is None:
        return
    #获取---1.闲置周报表格逻辑关系--行政区划代码对应
    #行政区代码前六位	实际管理区	设区市
    countyCode2CountyName2City = read_excel_to_dataframe(url4CountyCode2CountyName2City,
                                                         sheetName4CountyCode2CountyName2City)
    countyCode2CountyName2City = format_data2str(countyCode2CountyName2City,
                                                 ['行政区代码前六位'],
                                                 6)


    # 获取---5.闲置台账表格逻辑关系--1.基数清单（匹配用）---Excel文件path和SheetName
    #电子监管号 合同编号 实际管理区
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--1.基数清单（匹配用）')
    if url4List is None or sheetName4List is None:
        return
    # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同编号',
        '核实后实际管理区'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同编号': '合同编号',
        '核实后实际管理区': '实际管理区'
    }
    # 读取---5.闲置台账表格逻辑关系--1.基数清单（匹配用）
    # 电子监管号 合同编号 实际管理区
    table1_4baselist_df = part21_get_list_bycolumn(url4List, sheetName4List,
                                                        columns_to_keep,column_mapping)
    table1_4baselist_df.columns = table1_4baselist_df.columns.str.strip()


    # 获取---5.闲置台账表格逻辑关系--2.基数已处置清单(匹配用实时更新)---Excel文件path和SheetName
    #电子监管号 合同编号
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--2.基数已处置清单(匹配用实时更新)')
    if url4List is None or sheetName4List is None:
        return

    # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同编号'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同编号': '合同编号'
    }
    # 读取------5.闲置台账表格逻辑关系--2.基数已处置清单(匹配用实时更新)
    # 电子监管号 合同编号
    table2_4handledlist_df = part21_get_list_bycolumn(url4List, sheetName4List,
                                        columns_to_keep,column_mapping)
    table2_4handledlist_df.columns = table2_4handledlist_df.columns.str.strip()



    #获取---5.闲置台账表格逻辑关系--3.年内新增清单（匹配用，实时更新）---Excel文件path和SheetName
    #电子监管号 合同编号
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--3.年内新增清单（匹配用，实时更新）')
    if url4List is None or sheetName4List is None:
        return
    # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同编号'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同编号': '合同编号'
    }
    # 获取------5.闲置台账表格逻辑关系--3.年内新增清单（匹配用，实时更新）
    # 电子监管号 合同编号
    table3_4withyear_new_increaselist_df = part21_get_list_bycolumn(url4List, sheetName4List,
                                        columns_to_keep,column_mapping)
    table3_4withyear_new_increaselist_df.columns = table3_4withyear_new_increaselist_df.columns.str.strip()



    #通过电子监管号匹配表2.，匹配不上的宗地即为成果表1.中闲置土地类型为"基数内闲置土地"的
    #1.基数清单（匹配用）-2.基数已处置清单
    #1.基数清单（匹配用）table1_4baselist_df 电子监管号 合同编号 实际管理区
    #2.基数已处置清单 table2_4handledlist_df 电子监管号 合同编号

    #基数内闲置土地--idle_land_in_baselist_df '设区市','实际管理区', '电子监管号', '合同编号', '闲置土地类型'
    #基数已处置清单(没有匹配的） not_match_handledlist_df '电子监管号', '合同编号'
    idle_land_in_baselist_df,not_match_handledlist_df = part21_cal_idleland_by_baselist_sub_handledlist(table1_4baselist_df,
                                                            table2_4handledlist_df,df4Conty2City)

    #保存没有匹配上的基数已处置清单
    if not not_match_handledlist_df.empty:
        save_to_newexcel_bytime(not_match_handledlist_df, '没有与表1.基数清单（匹配用）匹配上的--2.基数已处置清单列表')

    # 该表格清单内的所有宗地，即为当下时点的年内新增闲置土地，即成果表1.中的 年内新增闲置土地
    #3.年内新增清单（匹配用，实时更新）table3_4withyear_new_increaselist_df---电子监管号 合同编号
    # 地方反馈年内新增归属 epc2county2cityTable4Local---电子监管号 实际管理区  设区市
    # 1.闲置周报表格逻辑关系--行政区划代码对应countyCode2CountyName2City---行政区代码前六位	实际管理区	设区市
    # 先用地方反馈年内新增归属（电子监管号 实际管理区  设区市）进行电子监管号匹配，匹配不上的再用行政区划代码对应匹配
    idle_land_4withyear_new_increaselist_df = part21_cal_withyear_new_increase_idleland(table3_4withyear_new_increaselist_df,
                                          epc2county2cityTable4Local,
                                          countyCode2CountyName2City)
    #设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    idle_land_4withyear_new_increaselist_df.columns = idle_land_4withyear_new_increaselist_df.columns.str.strip()

    # 基数内闲置土地  年内新增闲置土地 将两个表格进行拼接
    result4List1 = pd.concat([idle_land_in_baselist_df, idle_land_4withyear_new_increaselist_df],
                             ignore_index=True,
                             join='inner')
    # 根据第一列和第二列进行排序
    result4List1 = result4List1.sort_values(['设区市', '实际管理区'])


    # 获取---5.闲置台账表格逻辑关系--7.所有合同类型（匹配用）---Excel文件path和SheetName
    # 电子监管号 合同编号 主要用途 土地坐落 使用权人 供应面积
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--7.所有合同类型（匹配用）')
    if url4List is None or sheetName4List is None:
        return
    # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同/决定书编号',
        '主要用途',
        '土地坐落',
        '受让人/使用权人',
        '出让/划拨面积'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同/决定书编号': '合同编号',
        '主要用途': '主要用途',
        '土地坐落': '土地坐落',
        '受让人/使用权人': '使用权人',
        '出让/划拨面积': '供应面积'
    }
    # 读取------5.闲置台账表格逻辑关系--7.所有合同类型（匹配用）
    # 电子监管号 合同编号 主要用途 土地坐落 使用权人 供应面积
    table7_4all_contractlist_df = part21_get_list_bycolumn(url4List,sheetName4List,
                                                              columns_to_keep,column_mapping)

    #获取---用地用海一级转换表---Excel文件path和SheetName
    #主要用途	土地用途
    url4mainUse2LandUse, sheetName4mainUse2LandUse = selectExcelFileSheet.showWindow('用地用海一级转换表')
    if url4mainUse2LandUse is None or sheetName4mainUse2LandUse is None:
        return

    # 定义需要保留的列名
    columns_to_keep = [
        '土地用途',
        '一级类'
    ]
    # 定义列名映射字典
    column_mapping = {
        '土地用途': '主要用途',
        '一级类': '土地用途'
    }
    # 读取---用地用海一级转换表
    # 主要用途	土地用途
    uselandsea_table_4mainuse_landuse_list = part21_get_list_bycolumn(url4mainUse2LandUse,sheetName4mainUse2LandUse,
                                                              columns_to_keep,column_mapping)
    table7_4all_contractlist_df = pd.merge(table7_4all_contractlist_df, uselandsea_table_4mainuse_landuse_list, on='主要用途', how='left')
    table7_4all_contractlist_df = table7_4all_contractlist_df.drop(columns=['主要用途'])



    #获取---5.闲置台账表格逻辑关系--4.年初预计年内闲置土地基数清单（生成成果表0.1用）---Excel文件path和SheetName
    #电子监管号 合同编号 约定动工时间 实际动工时间
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--4.年初预计年内闲置土地基数清单')
    if url4List is None or sheetName4List is None:
        return

    # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同编号',
        '约定动工时间',
        '实际动工时间'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同编号': '合同编号',
        '约定动工时间': '约定动工时间',
        '实际动工时间': '实际动工时间'
    }
    # 读取---5.闲置台账表格逻辑关系--4.年初预计年内闲置土地基数清单（生成成果表0.1用）
    # 电子监管号 合同编号 约定动工时间 实际动工时间
    table4_4beginyear_estimate_withyear_idlelandlist_df = part21_get_list_bycolumn(url4List, sheetName4List,
                                                     columns_to_keep, column_mapping)
    #电子监管号  合同编号  约定动工时间  实际动工时间
    table4_4beginyear_estimate_withyear_idlelandlist_df = part21_cal_beginyear_estimate_withyear_idlelandlist(table4_4beginyear_estimate_withyear_idlelandlist_df)
    #电子监管号  合同编号
    table4_4beginyear_estimate_withyear_idlelandlist_df = table4_4beginyear_estimate_withyear_idlelandlist_df.drop(columns=table4_4beginyear_estimate_withyear_idlelandlist_df.columns[[2,3]])

    # 获取---5.闲置台账表格逻辑关系--6.已撤销（更新成果表0.1处置情）---Excel文件path和SheetName
    #电子监管号 合同编号
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--6.已撤销（更新成果表0.1处置情）')
    if url4List is None or sheetName4List is None:
        return
        # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同/决定书编号'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同/决定书编号': '合同编号'
    }
    # 读取---5.闲置台账表格逻辑关系--6.已撤销（更新成果表0.1处置情）
    # 电子监管号 合同编号
    table6_revokedlist_df = part21_get_list_bycolumn(url4List, sheetName4List,
                                                columns_to_keep, column_mapping)


    #步骤2.1  通过生成的年初预计清单，将本表的电子监管号前16位 匹配表6. 电子监管号的前16位，匹配到的 处置情况为“已处置”
    #5.闲置台账表格逻辑关系--4.年初预计年内闲置土地基数清单（生成成果表0.1用）table4_4beginyear_estimate_withyear_idlelandlist_df--电子监管号  合同编号
    #5.闲置台账表格逻辑关系--6.已撤销（更新成果表0.1处置情）table6_revokedlist_df--电子监管号  合同编号
    result0spot1_table_4handledlist1,result0spot1_table_4not_handledlist1 = (
        part21_handle_beginyear_estimate_withyear_idlelandlist(table4_4beginyear_estimate_withyear_idlelandlist_df,
                                                         table6_revokedlist_df))
    #result0spot1_table_4handledlist1 2.1.已处置('电子监管号' '合同编号')
    #result0spot1_table_4not_handledlist1 未处置清单('电子监管号' '合同编号')


    #步骤2.2基于上步骤，匹配不到的，将本表的电子监管号前16位 匹配表3. 电子监管号前16位，匹配到的 处置情况为 “已进入年内新增”
    #result0spot1_table_4not_handledlist1 未处置清单('电子监管号' '合同编号')
    # 5.闲置台账表格逻辑关系--3.年内新增清单（匹配用，实时更新）table3_4withyear_new_increaselist_df('电子监管号' '合同编号')
    result0spot1_table_4entered_withyear_new_increaselist2,result0spot1_table_4not_handledlist2 = (
        part21_handle_beginyear_estimate_withyear_idlelandlist(result0spot1_table_4not_handledlist1,
                                                         table3_4withyear_new_increaselist_df))
    #result0spot1_table_4entered_withyear_new_increaselist2  2.2已进入年内新增('电子监管号' '合同编号')
    #result0spot1_table_4not_handledlist2

    #步骤2.3 基于上步骤，匹配不到的，通过本表的电子监管号前16位 匹配表5. （电子监管号也需为前16位）的N列“实际动工时间”，有值的 ，处置情况 为“已处置”，空值或匹配不上的，为“未处置”
    # 获取---5.闲置台账表格逻辑关系--5.年内预计进入闲置土地基数更新清单（更新成果表0.1处置情）---Excel文件path和SheetName
    #电子监管号 合同编号 实际动工时间
    url4List, sheetName4List = selectExcelFileSheet.showWindow('5.闲置台账表格逻辑关系--5.年内预计进入闲置土地基数更新清单（更新成果表0.1处置情）')
    if url4List is None or sheetName4List is None:
        return
        # 定义需要保留的列名
    columns_to_keep = [
        '电子监管号',
        '合同编号',
        '实际动工时间'
    ]
    # 定义列名映射字典
    column_mapping = {
        '电子监管号': '电子监管号',
        '合同编号': '合同编号',
        '实际动工时间': '实际动工时间'
    }
    # 读取---5.闲置台账表格逻辑关系--5.年内预计进入闲置土地基数更新清单（更新成果表0.1处置情）
    # 电子监管号 合同编号 实际动工时间
    table5_4withyear_estimate_enter_idle_land_base_update_list = part21_get_list_bycolumn(url4List, sheetName4List,
                                                columns_to_keep, column_mapping)
    #电子监管号 合同编号
    table5_epc_contract_df = table5_4withyear_estimate_enter_idle_land_base_update_list.iloc[:, :2]
    result0spot1_table_4not_handledlist2_4match3, result0spot1_table_4not_handledlist3 = part21_handle_beginyear_estimate_withyear_idlelandlist(
        result0spot1_table_4not_handledlist2,
        table5_epc_contract_df)
    #result0spot1_table_4not_handledlist3 ('电子监管号' '合同编号') 2.3未处置
    #result0spot1_table_4not_handledlist2_4match3('电子监管号' '合同编号')

    # result0spot1_table_4not_handledlist2_4match3('电子监管号' '合同编号')
    #table5_4withyear_estimate_enter_idle_land_base_update_list(电子监管号,合同编号,实际动工时间)5.闲置台账表格逻辑关系--5.年内预计进入闲置土地基数更新清单（更新成果表0.1处置情）
    #'电子监管号'  '合同编号' '实际动工时间'
    result0spot1_table_4not_handledlist2_4match3 = pd.merge(result0spot1_table_4not_handledlist2_4match3,
                                                   table5_4withyear_estimate_enter_idle_land_base_update_list,
                                                   on=['电子监管号', '合同编号'], how='left')
    #2.3已处置
    result0spot1_table_4not_handledlist2_4match3_4nullTime = result0spot1_table_4not_handledlist2_4match3[result0spot1_table_4not_handledlist2_4match3['实际动工时间'].isnull()]
    result0spot1_table_4not_handledlist2_4match3_4nullTime = result0spot1_table_4not_handledlist2_4match3_4nullTime.drop(columns=['实际动工时间'])
    #2.3未处置
    result0spot1_table_4not_handledlist2_4match3_4notnullTime = result0spot1_table_4not_handledlist2_4match3[
        result0spot1_table_4not_handledlist2_4match3['实际动工时间'].notnull()]
    result0spot1_table_4not_handledlist2_4match3_4notnullTime = result0spot1_table_4not_handledlist2_4match3_4notnullTime.drop(columns=['实际动工时间'])

    # result0spot1_table_4handledlist1 2.1.已处置
    # result0spot1_table_4entered_withyear_new_increaselist2 2.2已进入年内新增
    # result0spot1_table_4not_handledlist3 2.3未处置
    # result0spot1_table_4not_handledlist2_4match3_4nullTime 2.3未处置
    # result0spot1_table_4not_handledlist2_4match3_4notnullTime 2.3已处置

    #已处置---- 合并表格
    result0spot1_table_4handled = pd.concat([result0spot1_table_4handledlist1,
                                                     result0spot1_table_4not_handledlist2_4match3_4notnullTime],
                                                    ignore_index=True)
    result0spot1_table_4handled['处置情况'] = '已处置'

    #未处置---- 合并表格
    result0spot1_table_4not_handled = pd.concat([result0spot1_table_4not_handledlist3,
                                                     result0spot1_table_4not_handledlist2_4match3_4nullTime],
                                                       ignore_index=True)
    result0spot1_table_4not_handled['处置情况'] = '未处置'

    #已进入年内新增
    result0spot1_table_4entered_withyear_new_increase = result0spot1_table_4entered_withyear_new_increaselist2
    result0spot1_table_4entered_withyear_new_increase['处置情况'] = '已进入年内新增'

    #'电子监管号' '合同编号' '处置情况'
    table_result_0spot1_df = pd.concat([result0spot1_table_4handled,
               result0spot1_table_4not_handled,
               result0spot1_table_4entered_withyear_new_increase],ignore_index=True)

    #table_result_0spot1_df'电子监管号' '合同编号' '处置情况'
    #countyCode2CountyName2City1.闲置周报表格逻辑关系--行政区划代码对应(行政区代码前六位	实际管理区	设区市)
    #table7_4all_contractlist_df '电子监管号', '合同编号', '土地坐落', '使用权人', '供应面积', '土地用途'
    table_result_0spot1_df = part21_handle_result0spot1_table(table_result_0spot1_df,
                                                              countyCode2CountyName2City,
                                                              table7_4all_contractlist_df)
    # 设区市 实际管理区 土地用途 土地坐落 电子监管号 合同编号  使用权人 供应面积 处置情况
    save_to_newexcel_bytime(table_result_0spot1_df, '成果表0.1年初预计年内新增清单')

    # 设区市 实际管理区 土地用途 土地坐落 电子监管号 合同编号  使用权人 供应面积 处置情况
    result4List2_4estimate_withyear_newincrease_idlelandlist_df = table_result_0spot1_df[
        table_result_0spot1_df['处置情况'] == '未处置']
    #设区市 实际管理区  电子监管号	合同编号
    result4List2_4estimate_withyear_newincrease_idlelandlist_df =  result4List2_4estimate_withyear_newincrease_idlelandlist_df.drop(
        columns=['土地用途','土地坐落','使用权人','供应面积','处置情况'])
    #设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    result4List2_4estimate_withyear_newincrease_idlelandlist_df['闲置土地类型'] = '预计年内新增闲置土地'

    #result4List1 设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    result4List1 = pd.concat([result4List1,result4List2_4estimate_withyear_newincrease_idlelandlist_df],ignore_index=True)


    # 合并两个表格
    #result4List1---设区市 实际管理区  电子监管号	合同编号  闲置土地类型
    #table7_4all_contractlist_df--电子监管号 合同编号 土地用途 土地坐落 使用权人 供应面积
    merged_df = part21_handle_result1_table(result4List1,table7_4all_contractlist_df)

    #保存结果到Excel
    url4Result,new_sheet_name  = save_to_newexcel_bytime(merged_df, '成果表1.清单')




